﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace leviathan.player
{
    /// <summary>
    /// Egy játékos karakterét reprezentáló osztály
    /// </summary>
    public class Player
    {
        private string name;
        private Int16 level;
        private Int16 xp;
        private string race;
        private string prof;
        private Int16 hp;
        private Int16 mana;
        private Int16 attackpower;
        private Int16 defensepower;
        private Int16 quickness;
        private string scenario;
        private Int16 scenariostate;

        /// <summary>
        /// Karakter adatait tároló konstruktor metódus.
        /// </summary>
        /// <param name="chname">Betöltendő karakter neve.</param>
        public Player(string chname)
        {
            string path = "../../saves/" + chname + ".sav";
            using (StreamReader sr = new StreamReader(path))
            {
                    name = sr.ReadLine();                               //Név
                    level = Convert.ToInt16(sr.ReadLine());             //Szint
                    xp = Convert.ToInt16(sr.ReadLine());                //Xp
                    race = sr.ReadLine();                               //Faj
                    prof = sr.ReadLine();                               //Kaszt
                    hp = Convert.ToInt16(sr.ReadLine());                //Életerő
                    mana = Convert.ToInt16(sr.ReadLine());              //Mana
                    attackpower = Convert.ToInt16(sr.ReadLine());       //Támadóerő
                    defensepower = Convert.ToInt16(sr.ReadLine());      //Védőerő
                    quickness = Convert.ToInt16(sr.ReadLine());         //Sebesség
                    scenario = sr.ReadLine();                           //Scenario
                    scenariostate = Convert.ToInt16(sr.ReadLine());     //Scenario fázis

                    sr.Close();
             }
        }

        /// <summary>
        /// Aktuális karakter küldetésének beállítására szolgáló metódus.
        /// </summary>
        /// <param name="str">Beállítandó küldetés neve.</param>
        public void setScenario(string str)
        {
            scenario = str;
        }

        /// <summary>
        /// Aktuális karakter küldetésének a jelenetének beállítására szolgáló metódus.
        /// </summary>
        /// <param name="num">Beállítandó jelenet száma (default 0);</param>
        public void setScenarioState(int num = 0)
        {
            scenariostate = Convert.ToInt16(num);
        }

        /// <summary>
        /// Karakter nevének lekérdezésére szolgáló metódus.
        /// </summary>
        /// <returns>Karakter neve stringként.</returns>
        public string getName()
        {
            return name;
        }

        /// <summary>
        /// Karakter szintjének lekérdezésére szolgáló metódus.
        /// </summary>
        /// <returns>Karakter szintje short integerként (Int16).</returns>
        public Int16 getLevel()
        {
            return level;
        }

        public string getRace()
        {
            return race;
        }

        public string getProf()
        {
            return prof;
        }

        public Int16 getXp()
        {
            return xp;
        }

        public void addXp(Int16 add)
        {
            xp = (Int16)(xp + add);
            Int16 cap = (Int16)(100 * level);
            if (xp >= cap)
            {
                level = (Int16)(level + 1);
                xp = (Int16)(xp - cap);

                if (level % 5 == 0)
                {
                    ++attackpower;
                    ++defensepower;
                }
                hp += 10;
                mana += 10;
            }

        }

        public Int16 getHp()
        {
            return hp;
        }

        public void addHp(Int16 add)
        {
            hp += add;
        }

        public Int16 getMana()
        {
            return mana;
        }

        public void addMana(Int16 add)
        {
            mana += add;
        }

        public Int16 getAp()
        {
            return attackpower;
        }

        public void addAp(Int16 add)
        {
            attackpower += add;
        }

        public Int16 getDp()
        {
            return defensepower;
        }

        public void addDp(Int16 add)
        {
            defensepower += add;
        }

        public Int16 getQuickness()
        {
            return quickness;
        }

        public void addQuickness(Int16 add)
        {
            quickness += add;
        }

        public string getScenario()
        {
            return scenario;
        }

        public Int16 getScenarioState()
        {
            return scenariostate;
        }
    }
}
